#include "widget.h"
#include "ui_widget.h"

#include <QApplication>
#include <QWidget>
#include <QVBoxLayout>
#include <QGridLayout>
#include <QPushButton>
#include <QFileDialog>
#include <QTextEdit>
#include <QTimer>
#include <QFontDialog>
#include <QColorDialog>
#include <QSpinBox>
#include <QLabel>
#include <QFile>
#include <QMessageBox>
#include <QTextStream>

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
   // 设置窗口标题
   setWindowTitle("作业1");

   // 创建布局
   // QVBoxLayout *layout = new QVBoxLayout(this); // 垂直布局
    QGridLayout* layout = new QGridLayout(this);

   // 创建文本显示区域
   textEdit = new QTextEdit(this);
   textEdit->setReadOnly(true); // 文件只可读
   // 会压制后面的设置
   //textEdit->setStyleSheet("QTextEdit { background-color: #f0f0f0; color: #333; font-size: 14px; }");
   layout->addWidget(textEdit, 0, 0, 1, 4); // 占据 1 行 4 列

   // 创建文件选择按钮
   QPushButton *fileButton = new QPushButton("选择文件", this);
   //textEdit->setStyleSheet("QTextEdit { background-color: #f0f0f0; color: #333; font-size: 14px; }");
   layout->addWidget(fileButton, 1, 0);

   // 创建字体选择按钮
   QPushButton *fontButton = new QPushButton("选择字体", this);
   layout->addWidget(fontButton, 1, 1);
   // 创建颜色选择按钮
   QPushButton *colorButton = new QPushButton("选择颜色", this);
   layout->addWidget(colorButton, 1, 2);

   // 创建字号选择控件 -- spinBox（微调）
   QLabel *fontSizeLabel = new QLabel("字号:", this);
   layout->addWidget(fontSizeLabel, 2, 0);

   fontSizeSpinBox = new QSpinBox(this);
   fontSizeSpinBox->setRange(8, 72);
   fontSizeSpinBox->setValue(12); // 给定初始值
   layout->addWidget(fontSizeSpinBox, 2, 1);

   // 创建滚动速度选择控件
   QLabel *speedLabel = new QLabel("滚动速度 (ms):", this);
   layout->addWidget(speedLabel, 2, 2);

   speedSpinBox = new QSpinBox(this);
   speedSpinBox->setRange(100, 5000);
   speedSpinBox->setValue(1000);
   layout->addWidget(speedSpinBox, 2, 3);

   // 创建定时器
   timer = new QTimer(this);

   // 连接信号槽
   connect(fileButton, &QPushButton::clicked, this, &Widget::openFile);
   connect(fontButton, &QPushButton::clicked, this, &Widget::chooseFont);
   connect(colorButton, &QPushButton::clicked, this, &Widget::chooseColor);
   connect(fontSizeSpinBox, QOverload<int>::of(&QSpinBox::valueChanged), this, &Widget::updateFontSize);
   connect(speedSpinBox, QOverload<int>::of(&QSpinBox::valueChanged), this, &Widget::updateSpeed);
   connect(timer, &QTimer::timeout, this, &Widget::displayNextLine);

   setLayout(layout);
   setMinimumSize(600, 400);
}

Widget::~Widget()
{
    delete ui;
}

void Widget::openFile()
{
    QString fileName = QFileDialog::getOpenFileName(this, "选择文件", "", "文本文件 (*.txt)");
    if (!fileName.isEmpty()) {
        QFile file(fileName);
        if (file.open(QIODevice::ReadOnly | QIODevice::Text)) {
            QTextStream in(&file);
            lines = in.readAll().split('\n'); // 读到换行符
            file.close();
            currentLine = 0;
            timer->start(speedSpinBox->value());
        }
        else{
            QMessageBox::warning(this, "错误", "无法打开文件");
            return ;
        }
    }
}

void Widget::chooseFont()
{
    bool ok;
    QFont font = QFontDialog::getFont(&ok, this);
    if (ok) {
        textEdit->setFont(font);
    }
}

void Widget::chooseColor()
{
    QColor color = QColorDialog::getColor(Qt::black, this, "选择颜色");
    if (color.isValid()) {
        textEdit->setTextColor(color);
    }
}

void Widget::updateFontSize(int size)
{
    QFont font = textEdit->font();
    font.setPointSize(size);
    textEdit->setFont(font);
}

void Widget::updateSpeed(int speed)
{
    timer->setInterval(speed);
}

void Widget::displayNextLine()
{
    if (currentLine < lines.size()) {
//        // 情况一：追加式读取
//        QString currentText = textEdit->toPlainText(); // 获取当前文本框内容
//        if(!currentText.isEmpty()) currentText += '\n';
//        currentText += lines[currentLine++]; // 追加
//        textEdit->setText(currentText);
        // 情况二：每次读一行
        textEdit->setText(lines[currentLine++]);
    } else {
        timer->stop();
    }
}
